#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Optional, Dict, Any
from mylogger import log_info_file, log_error_console, log_warning_console


class ServerConfig:
    """
    服务器配置类，用于存储和验证服务器连接信息
    
    属性:
        name: 服务器名称（用于标识）
        ip: 服务器IP地址
        port: SSH端口号
        user: 用户名
        password: 密码
        timeout: 连接超时时间
    """
    def __init__(self, config_dict: Dict[str, Any]):
        """
        初始化服务器配置
        
        参数:
            config_dict: 包含服务器配置的字典
        """
        self.name = config_dict.get('name', 'unnamed')
        self.ip = config_dict.get('ip', '')
        self.port = config_dict.get('port', 22)
        self.user = config_dict.get('user', '')
        self.password = config_dict.get('password', '')
        self.timeout = config_dict.get('timeout', 30)
    
    def is_valid(self) -> bool:
        """
        验证服务器配置是否有效
        
        返回:
            bool: 配置是否有效
        """
        # 检查必需字段
        if not self.ip:
            log_error_console(f"服务器配置 {self.name} 缺少IP地址")
            return False
            
        if not self.user:
            log_error_console(f"服务器配置 {self.name} 缺少用户名")
            return False
            
        # 密码是可选的（如果使用密钥认证），但如果为空则记录警告
        if not self.password:
            log_warning_console(f"服务器配置 {self.name} 缺少密码")
            
        # 端口应该是有效的整数
        try:
            if not isinstance(self.port, int) or self.port <= 0 or self.port > 65535:
                log_error_console(f"服务器配置 {self.name} 包含无效的端口号: {self.port}")
                return False
        except Exception:
            log_error_console(f"服务器配置 {self.name} 包含无效的端口号格式")
            return False
        
        log_info_file(f"服务器配置 {self.name} 验证通过")
        return True
    
    def __str__(self) -> str:
        """
        返回服务器配置的字符串表示
        
        返回:
            str: 服务器配置的字符串表示（出于安全考虑，不显示密码）
        """
        return f"ServerConfig(name='{self.name}', ip='{self.ip}', port={self.port}, user='{self.user}', timeout={self.timeout})"
